const express = require('express');
const cors = require('cors');
const mysql = require('mysql2/promise');
const app = express();
const PORT = 3001; // 保持端口一致

// 中间件
app.use(cors());
app.use(express.json());

// 数据库配置
const dbConfig = {
  host: 'localhost',
  user: 'root',
  password: '123456',
  database: 'noquestion',
  connectTimeout: 5000 // 添加超时设置，避免无限等待
};

// 测试数据库连接并启动服务器
async function startServer() {
  try {
    // 先测试数据库连接
    const connection = await mysql.createConnection(dbConfig);
    console.log('✅ 数据库连接成功');
    await connection.end();

    // 连接成功后再创建连接池和启动服务器
    const pool = mysql.createPool(dbConfig);
    
    // API路由
    app.get('/', (req, res) => {
      res.send('Vue+Vite项目的后端服务正在运行');
    });

    app.get('/api/users', async (req, res) => {
      try {
        const [rows] = await pool.query('SELECT * FROM users');
        res.json(rows);
      } catch (err) {
        console.error('查询用户失败:', err);
        res.status(500).json({ error: '获取用户数据失败' });
      }
    });

    app.get(`/api/users/:id`,async (req,res)=>{
      try{
        const {id}=req.params;
        const [rows]=await pool.query('SELECT * FROM users WHERE id = ?',[id]);

        if(rows.length===0){
          return res.status(404).json({
            success:false,
            message:'未找到该用户'
          });
        }

        res.status(200).json({
          success:true,
          data:rows[0]
        })

      }catch(err){
          res.status(500).json({
            success:false,
            message:'查询失败',
            error:err.message
          })
      }
    })

    app.post('/api/login',async (req,res)=>{
      try{
        const {username,pass}=req.body;
        const [rows] = await pool.query('SELECT * FROM users WHERE username = ? AND pass = ?',[username,pass]);

        if(rows.length===0){
          return res.status(401).json({
            success:false,
            message:'用户名或密码错误'
          })
        }

        res.status(200).json({
          success:true,
          message:`${username}`,
          data:{
            user:rows[0],
            token:'fake-token'
          }
        });

      }catch(err){
          res.status(500).json({
            success:false,
            message:'登录失败',
            error:err.message
          })
      }
    })

    app.get('/api/questioncata',async(req,res)=>{
         try{
            const [rows] = await pool.query('SELECT * FROM questioncata WHERE pid IS NOT NULL');
              
              if(rows.length>0){
                  res.status(200).json({
                  data:rows
                })
              }

              return res.status(404).json({
                    success:false,
                    message:'没有在questioncata中找到数据',
                }
              )
        
          }catch(err){
            res.status(500).json({
              success:false,
              message:'查询失败',
              error:err.message
            })

      }
    })

    // 启动服务器
    app.listen(PORT, () => {
      console.log(`🚀 服务器运行在 http://localhost:${PORT}`);
    });

  } catch (err) {
    console.error('❌ 数据库连接失败:', err.message);
    // 连接失败时不启动服务器
    process.exit(1);
  }
}

// 启动整个应用流程
startServer();
